package com.example.demo.control;

import com.example.demo.entity.Users;
import com.example.demo.repository.UserRepository;
import com.example.demo.utils.BackResult;
import com.example.demo.utils.UserType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserRepository userRepository;

    //获取角色 api路径3000/user/userType
    @GetMapping("/userType")
   public Object getUserType(String taget){

        List<Map<String, String>> data = UserType.getUserType();
        return BackResult.success(data);
    }
    /**
     * 用户登录
     * */
    @GetMapping("/login")
    public Object userLogin(String username, String password,String type){
        if(username==null || "".equals(username)){
            return BackResult.fail("用户名不能为空！");
        }
        if(password==null||"".equals(password)){
            return BackResult.fail("密码不能为空！");
        }
        try {
            Users data=userRepository.login(username,password,1,type);
            if (type==null||"".equals(type)){
                return BackResult.fail("用户类型不能为空！");
            }
            if (data==null){
                return BackResult.fail("账号或密码错误！");
            }
            return BackResult.success(data);
        }catch (Exception e){
            System.out.println(e);
        }
        return null;
    }
    /*
    * 查找所有用户
    * */
    @GetMapping("/findAllUser")
    public Object findAllUser(Integer page, Integer pageSize, String type)
    {
        if (pageSize==null||page==null) {
            page=0;
            pageSize=15;
        }

        Map<String,Object> map =new HashMap<>();
        if (type==null){
           List data= userRepository.findByAny(page * pageSize, pageSize);
            int total=userRepository.total();
            map.put("list",data);
            map.put("total",total);
            return  BackResult.success(map);
        }
        List  data= userRepository.findAllUser(page*pageSize, pageSize,type);
        int total=userRepository.totals(type);
        map.put("list",data);
        map.put("total",total);
        return  BackResult.success(map);
    }
    /*
    *添加用户
    *  */
    @PostMapping("/addUser")
    public Object addUser( Users users,String username,String type){
        Users data1=userRepository.findByName(username,1);
        if (data1!=null){
            return BackResult.fail("用户已存在！");
        }
        if (type==null||"".equals(type)){
            return BackResult.fail("角色类型不能为空！");
        }
        if(users!=null&&users.getType().equals("admin")){
            return  BackResult.fail("不能添加超级管理员！");
        }
//        if (username==null||"".equals(users.getUsername())){
//            return  BackResult.fail("用户名不能为空！");
//        }
        if (users.getPassword()==null||"".equals(users.getPassword())){
            return  BackResult.fail("密码不能为空！");
        }
        users.setType(type);
        users.set_live(1);
        Users data= userRepository.save(users);
        if (data!=null){
           return  BackResult.success(data);
        }else {
           return BackResult.fail("添加失败！");
       }
    }
    /*
    * 删除用户 删除Id
    * */
    @PostMapping("/deleteUser")
    public Object deleteUser(Integer id){
        if(id==null){
            return BackResult.fail("id不能为空！");
        }
        Users user=userRepository.findBy_live(id,1);
        if (user==null){
            return BackResult.fail("用户不存在!");
        }
        if(user.getType().equals("admin")){
        return  BackResult.fail("超级管理员不能删除！");
    }
        userRepository.deleteById(id);
        return BackResult.success("删除成功！");
    }
    /*
     * 删除用户 更新_live
     * */
    @PostMapping("/removeUser")
    public Object removeUser(Integer id){
        Users users=userRepository.findBy_live(id,1);
        if (users==null){
            return BackResult.fail("用户不存在!");
        }
        if(users.getType().equals("admin")){
            return  BackResult.fail("超级管理员不能删除！");
        }
        users.set_live(0);
        userRepository.save(users);
        return BackResult.success("删除成功！");
    }
    /*
    * 修改用户
    * */
    @PostMapping("/updateUser")
    public Object updateUser(Integer id,String password,String mobile,String email){
        Users users=userRepository.findBy_live(id,1);
        if (users==null){
            return BackResult.fail("用户不存在!");
        }
        if(users.getType().equals("admin")){
            return  BackResult.fail("超级管理员不能修改！");
        }
        if (password==null||"".equals(password)){
            return BackResult.fail("密码不能为空！");
        }
        users.setPassword(password);
        if (mobile!=null||"".equals(mobile)){
            users.setMobile(mobile);
        }
        if (email!=null||"".equals(email)){
            users.setEmail(email);
        }
        userRepository.save(users);
        return BackResult.success(users);
    }
}
